package com.java.learn;

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class App {
    public static void main(String[] args) {
        Map<String, Integer> items = new HashMap<String, Integer>();
        for (int i = 0; i < 16; ++i) {
            items.put(String.valueOf(i), i);
        }

        // m1
        System.out.println("M1:");
        for (Map.Entry<String, Integer> e : items.entrySet()) {
            System.out.println("---> " + e.getKey() + " : " +  e.getValue());
        }

        // m2 显示调用iterator
        System.out.println("M2:");
        Iterator<Map.Entry<String, Integer>> iter = items.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry<String, Integer> e = iter.next();
            System.out.println("---> " + e.getKey() + " : " +  e.getValue());
        }

        // m3 功能接口@FunctionalInterface
        System.out.println("M3:");
        items.forEach((K,V) -> System.out.println("---> " + K + " : " + V)); 
        // 多行需要{ }
        // items.forEach((K,V) -> {
        //     System.out.println("---> " + K + " : " + V);
        //     // Do Something
        // }); 
    }
}

//                                                                     仍然保留再0slot上
//   HashMap: 通过数组+链表的数据结构形成实际数据存储         +-----------------------------------------+
//                                                            |                                         |
//               slot                                         |                                         |
//          0 +----------+         +----------+          +----------+         +----------+         +----------+
//            |          |         |          |          |          |         |          |         |          |
//            |   0      |-------->|    16    |--------->|   32     |-------->|   48     |-------->|   64     |
//            |          |         |          |          |          |         |          |         |          |
//          1 +----------+         +----------+          +----------+         +----------+         +----------+
//            |          |              |                                           |
//     index  |          |              +---------------------------------+---------+
//       |    |          |                                                |   16.next 指向 48
//       |  2 +----------+         +----------+          +----------+     +----------+
//       |    |          |         |          |          |          |                | 整
//       +--->|    2     |-------->|    18    |--------->|   34     |                | 个
//            |          |         |          |          |          |                | 挂
//          3 +----------+         +----------+          +----------+                | 载
//            |          |                                                           | 16slot
//            |          |                                                           |
//            |          |                                                           |
//            +----------+                                                           |
//            |          |                                                           |
//            |    .     |                                                           |
//            |          |                                                           |
//            |    .     |                                                           |
//            |          |                                                           |
//            |    .     |                                                           |
//            |          |                                                           |
//            |          |                                                           |
//            |          |                                                           |
//            |          |                                                           |
//         15 +----------+          +----------+                                     |
//            |          |          |          |                                     |
//            |   15     +--------->|   31     |                                     |
//            |          |          |          |                                     |
//            +----------+          +----------+                                     |
//      (slot初始16, 之后成倍扩大)                                                   | MapHash: resize的实质
//      成倍扩大的好处: resize HashMap时简便, 算slot的index也简单                    |
//      例如:                                                                        |
//          当扩在到32时                                                             |
//                                                                                   |
//                                                                                   |
//               slot                                                                |
//          0 +----------+          +----------+           +----------+              |
//            |          |          |          |           |          |              |
//            |   0      |--------->|   32     | --------->|    64    |              |
//            |          |          |          |           |          |              |
//          1 +----------+          +----------+           +----------+              |
//            |          |                                                           |
//     index  |          |                                                           |
//       |    |          |                                                           |
//       |  2 +----------+          +----------+                                     |
//       |    |          |          |          |                                     /
//       +--->|    2     |--------->|   34     |                                    /
//            |          |          |          |                                   /
//          3 +----------+          +----------+                                  /
//            |          |                                                       /
//            |    .     |                                                      /
//            |    .     |                                                     /
//            |    .     |                                                    /
//            |          |                                                   /
//            |          |                                                  /
//            |          |                                                 /
//         15 +----------+                                                /
//            |          |              +---------------------------------
//            |   15     |              |
//            |          |              |
//         16 +----------+         +----v-----+
//            |          |         |          |
//            |   16     |-------->|    48    |
//            |          |         |          |
//         17 +----------+         +----------+
//            |          |
//            |          |
//            |          |
//            |    .     |
//            |    .     |
//            |    .     |
//            |          |
//            |          |
//            |          |
//         31 +----------+
//            |          |
//            |   31     |
//            |          |
//            +----------+
//
//
//  缺陷: 元素不适合有序排序
